// 对 axios进行二次封装
import axios from 'axios'

import Nprogress from 'nprogress' // 1.引入进度条 npm i nprogress --save
// console.log(nprogress)
// // start 进度条开始   done 进度条结束
// #nprogress .bar {
//   background: red !important; //自定义颜色
// }
import 'nprogress/nprogress.css' // 2.进度条

// import { loading } from 'element-ui' // 添加 loading效果
// let loadingInstance = null // 添加 loading效果

const requests = axios.create({
  // 发请求的时候，路径当中会出现 http://localhost:8080/api
  // 如果在index 中 return requests({ url: `api/product/getBaseCategoryList`, method: 'get' }) 配置了
  // 这里就不用地址了
  baseURl: '',
  // 超过 5s 请求超时
  timeout: 5000
})
// 请求拦截器：在发请求之前，请求拦截器可以检测到，可以在请求发出去之前做事情
// 详情在 axios 官网
// 添加请求拦截器， 在发起请求之前可以做什么
requests.interceptors.request.use((config) => {
  // 进度条开始 3
  Nprogress.start()
  // loadingInstance = loading.service({ fullscreen: true }) // 添加 loading效果
  return config
})

// 添加响应拦截器
requests.interceptors.response.use(
  (response) => {
    // 进度条结束 4
    Nprogress.done()

    setTimeout(() => {
      // loadingInstance.close() // 关闭loading
    }, 2000)

    // 响应数据成功的回调，服务器响应数据回来之后
    return response.data
  },
  (error) => {
    // 响应数据失败的回调
    return Promise.reject(new Error('faile'))
  }
)
export default requests
